package com.chukun.module.inf;

import java.util.ServiceLoader;

/**
 * @author chukun
 * @version 1.0.0
 * @description 签名接口定义
 * @createTime 2022年06月06日 22:06:00
 */
public interface Digest {


    /**
     * 签名方法定义
     * @param message
     * @return
     */
    byte[]  digest(byte[] message);


    /**
     * 创建算法签名的方法
     * @param algorithm
     * @return
     */
    static Returned<Digest> of(String algorithm) {
        ServiceLoader<DigestManager> serviceLoader = ServiceLoader.load(DigestManager.class);
        for (DigestManager digestManager : serviceLoader) {
            Returned<Digest> returned = digestManager.create(algorithm);
            if (returned instanceof Returned.ReturnValue rv) {
                return rv;
            } else if (returned instanceof Returned.ErrorCode) {
                continue;
            }
        }
        return Returned.UNDEFINED;
    }
}
